草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 包装 STL vector 并更改其迭代器的行为

有这样的代码:#include#includetemplateclassA{public:classiterator:publicstd::vector::iterator{public:T&operator*(){??}};iteratorbegin(){returnv.begin();//error}iteratorend(){returnv.end();//error}voidadd(constT&elem){v.push_back(elem);}private:std::vectorv;};intmain(){Aa;a.add(2);a.add(4);for(A::iterat

c++ - 如何迭代 128 位 block 中的字符串?

我有一个函数可以对来自任意长度字符串的128位数据block进行操作。如果字符串不能均匀地分成128位的block,它将被相应地填充。目的是转换输入函数的字符串中的数据。我最初想到的是这样遍历字符串://Thismighthavestupiderrors.Hopefullyitstillggetsthepointacross.for(inti=0;i我想这可行,但我认为必须有更优雅的方法来做到这一点。我想到的一个想法是将strn封装在一个类中,并实现我自己的迭代器,该迭代器可以以128位block的形式读取其内容。这很吸引人,因为构造函数可以处理填充,并且我当前使用的一些函数可以设为私

c++ - 移动到容器中的迭代器

我有一个类,其中包含一个容器,以及一个指向该容器的迭代器。如何正确实现移动构造函数?我似乎记得按照标准,您不能依赖迭代器在移动后仍然有效(这太愚蠢了)。有没有什么方法可以让我“更新”迭代器(如果它失效了)?或者我是否必须动态分配容器、移动它,然后让迭代器以这种方式保持有效? 最佳答案 更新:使用std::unique_ptr作为容器的持有者是规范的通用解决方案——简单地不要移动容器,只是转移所有权和交换迭代器。正如您已经说过的,您可以将其作为优化的特殊情况,尽管我希望通用解决方案也非常有效,并且我只会在证明它是真实的之后才接受代码的

c++ - 使用反向迭代器插入到 std::list 会更改原始反向迭代器的值

在网上搜索了很多,都没有找到问题的答案。我正在使用reverse_iterator向std::list插入一个值。虽然插入发生在预期的适当位置,但我注意到用于插入的原始reverse_iterator的值发生了变化。完全不相关的reverse_iterator的值也发生了变化。我已经能够在一个简单的例子中重现这一点#include#include#includeintmain(){//Creatingalistofvalues1,2,4,5std::listmyList;myList.push_back(1);myList.push_back(2);myList.push_back(4

c++ - 与 at() 或索引相比,为什么使用 C++ 迭代器会显着增加代码大小?

我一直在考虑在嵌入式系统(16KBSRAM和64KB闪存,CortexM4)上使用更新的C++语言功能,例如迭代器,但遇到了令人惊讶的障碍。为什么迭代器如此庞大?我的印象是它们基本上是一些指针运算或索引。STL是否引入了一些意外代码?这些是在Windows上使用KinetisDesignStudio和来自here的gcc-arm-none-eabi-4_9工具链使用以下标志。arm-none-eabi-g++-mcpu=cortex-m4-mthumb-mfloat-abi=hard-mfpu=fpv4-sp-d16-Os-fmessage-length=0-fsigned-char-

c++ - 数据类型不完整的容器的迭代器是否合法?

下面的代码合法吗?classA{std::map::iteratorx;};VisualStudio2015接受它,但clang说.../ndk/sources/cxx-stl/llvm-libc++/libcxx/include/utility:254:9:error:fieldhasincompletetype'A'_T2second;^....a.cpp:52:21:note:definitionof'A'isnotcompleteuntiltheclosing'}'structA^编辑:问题似乎与标准库有关,http://rextester.com/QNNEG57036失败了我

C++::Boost::Regex 迭代子匹配

我将命名捕获组与BoostRegex/Xpressive结合使用。我想遍历所有子匹配,并获取每个子匹配的值和KEY(即what["type"])。sregexpattern=sregex::compile("(?Phref|src)=\"(?P[^\"]+)\"");sregex_iteratorcur(web_buffer.begin(),web_buffer.end(),pattern);sregex_iteratorend;for(;cur!=end;++cur){smatchconst&what=*cur;//Iknowhowtoaccessusingastringkey:wh

采用 STL 样式迭代器的 C++ 虚方法

我想要一个接口(interface)ModelGenerator,它有一个方法generate(),它接受一个可迭代的证据列表并创建一个模型。使用STLpseudo-duck-typing迭代器习惯用法...templateclassModelGenerator{public:templatevirtualboolgenerate(Iteratorbegin,Iteratorend,Model&model)=0;};但是虚函数不能模板化。所以我必须为整个类(class)制作模板:templateclassModelGenerator{public:virtualboolgenerate

c++ - 调整自定义迭代器以便(a?)reverse_iterator 可以翻转它的输出

最近,用户@MooingDuck设计了concatenated_range,一个优雅的自定义迭代器,解决了“链接”两个迭代器的问题,一切都在幕后。它非常适合预期用途:autorange0=concatenate_ranges(x,x+i-1,x+i,x+a5+1);a6=foo(range0.first,range0.second);现在,我想通过执行(示例#2)来调整它:autorange0=concatenate_ranges(x+a5+1,x+i-1,x+i+1,x+n);a6=foo(std::reverse_iterator(range0.second),std::rever

c++ - 如何访问第二个 map 迭代器?

我们是两个学生,我们现在有一个我们无法解决的史诗般的大问题。我们向老师求助,但他帮不了我们,所以我们最后的机会就是这个论坛!我们正在做一个项目:NPI文件的命令解释器。map::iteratortrouve=interpreteur.myMap.find(saisie);if(trouve==interpreteur.myMap.end())cerr*second)();我们必须使用名为“map”的对象,但我们无法获取第二个参数,名为..“Second”。为什么?代码块告诉我们错误在“else”中,这是错误:'second'wasnotdeclaredinthisscope.我们也试过